package com.codeanalysissys.backend.service.frame;

import com.codeanalysissys.backend.entity.response.Result;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;

public interface SseEmitterService {
    /**
     * 创建 sse 连接
     *
     * @param clientId 当前连接 Id
     * @return 新创建 SseEmitter 类实例
     */
    SseEmitter createSseConnect(String clientId);

    /**
     * 关闭 sse 连接
     *
     * @param clientId 当前连接 Id
     */
    void closeSseConnect(String clientId);

    /**
     * 根据当前连接 Id 获取 SseEmitter
     *
     * @param clientId 当前连接 Id
     * @return 相应 SseEmitter 类实例
     */
    SseEmitter getSseEmitterByClientId(String clientId);

    /**
     * 推送消息到当前保持连接的所有客户端，此处结合业务代码，业务中需要推送消息处调用即可向客户端主动推送消息
     *
     * @param sseEmitterResultVOList 实际发送消息内容列表
     */
    void sendMsgToAllClient(List<Result> sseEmitterResultVOList);

    /**
     * 推送消息到指定客户端，此处结合业务代码，业务中需要推送消息处调用即可向客户端主动推送消息
     *
     * @param sseEmitterResultVOList 实际发送消息内容列表
     */
    void sendMsgToClientByClientId(String clientId, List<Result> sseEmitterResultVOList);
}
